package com.tencent.essbasic.byfile;

import com.tencent.essbasic.api.CreateConsoleLoginUrl;
import com.tencent.essbasic.api.CreateFlowByFileDirectly;
import com.tencent.essbasic.api.DescribeFileUrls;
import com.tencentcloudapi.essbasic.v20210526.models.CreateConsoleLoginUrlResponse;
import com.tencentcloudapi.essbasic.v20210526.models.FlowApproverInfo;
import java.util.Map;

import static com.tencent.essbasic.common.CreateFlowUtils.convertImageFileToBase64;
import static com.tencent.essbasic.common.CreateFlowUtils.setAgent;

/*
本示例用于第三方应用集成接口对接，通过文件快速发起第一份合同
建议配合文档进行操作，先修改config里的基本参数以及对应环境域名，然后跑一次
第三方应用集成主要针对平台企业-代理子客发起合同，简要步骤主要是
	1. 通过CreateConsoleLoginUrl引导子客企业完成电子签的实名认证 - 子客企业在电子签配置印章等
	2. 通过简单封装的CreateFlowByFileDirectly接口上传文件并快速发起一份合同，并得到签署链接
	3. 在小程序签署合同，通过API下载合同
基于具体业务上的参数调用，可以参考官网的接口说明
https://cloud.tencent.com/document/product/1420/61534
每个API的封装在api目录下可以自己配合相关参数进行调用
*/
public class ByFileQuickStart {
    public static void main(String[] args) {
        try {
            // Step 1 登录子客控制台
            // 子客企业真实名称
            String proxyOrganizationName = "好企业测试";

            // 创建控制台链接
            CreateConsoleLoginUrlResponse loginUrlResponse =
                    CreateConsoleLoginUrl.createConsoleLoginUrl(setAgent(), proxyOrganizationName, null);

            // Step 2 发合同
            // 定义文件所在的路径
            String filePath = "blank.pdf";
            // 定义合同名
            String flowName = "我的第一个合同525-2";
            // 将文件处理为Base64编码后的文件内容
            String fileBase64 = convertImageFileToBase64(filePath);

            // 此处为快速发起；如果是正式接入，构造签署人，请参考函数内说明，构造需要的场景参数
            FlowApproverInfo[] flowApproverInfos = ByFile.BuildApprovers();

            // 发起合同
            Map<String, String> resp = CreateFlowByFileDirectly.createFlowByFileDirectly
                    (flowName, fileBase64, flowApproverInfos, setAgent());

            // 返回合同Id
            System.out.println("您的控制台入口为：");
            System.out.println(loginUrlResponse.getConsoleUrl());
            System.out.println("\r\n\r\n");

            System.out.println("您创建的合同id为：");
            System.out.println(resp.get("flowId"));
            System.out.println("\r\n\r\n");

            // 返回签署的链接
            System.out.println("签署链接为：");
            System.out.println(resp.get("url"));
            System.out.println("\r\n\r\n");

            // Step 3 下载合同
            // 返回合同下载链接
            String url = DescribeFileUrls.describeFileUrls(resp.get("flowId"),setAgent());
            System.out.println("请访问以下地址下载您的合同：");
            System.out.println(url);
            System.out.println("\r\n\r\n");
        }catch (Exception e) {
            e.printStackTrace();
        }
    }
}
